﻿using Stimulsoft.Report;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WorkDev.ERP.Modulo_Escrita_Fiscal.Cadastro
{
    public partial class SMFrmCdEfProduto_ANP : Form
    {
        public SMFrmCdEfProduto_ANP()
        {
            InitializeComponent();
        }

        #region Instancias

        private ClFBWaGenericas2.Classes.ClsFormularios clFormularios = new ClFBWaGenericas2.Classes.ClsFormularios();
        private ClFBWaGenericas2.Classes.ClsBancoDados clBancoDados = new ClFBWaGenericas2.Classes.ClsBancoDados();
        private ClFBWaGenericas2.Classes.ClsFuncoes clFuncoes = new ClFBWaGenericas2.Classes.ClsFuncoes();
        private Modulo_Aplicativo.Classes.ClsAplicativo_Parametros clAplicativo_Parametro = new WorkDev.ERP.Modulo_Aplicativo.Classes.ClsAplicativo_Parametros();
        private ClFBWaGenericas2.Classes.ClsArquivos clArquivos = new ClFBWaGenericas2.Classes.ClsArquivos();

        //Dataset 
        private System.Data.DataSet DstImpressao = new DataSet();


        #endregion

        #region Inicialização

        private void Form_Load(object sender, System.EventArgs e)
        {

            if (this.clFormularios.CriacaoForm(this, this.TabConsultar, this.TabManutencao, Program.ClsAmbiente, true) == true)
            {
                this.IMP_ctlShowImpressao.Ambiente = Program.ClsAmbiente;
                this.IMP_ctlShowImpressao.DataSetRelatorio = DstImpressao;
                this.IMP_ctlShowImpressao.btnIr.Click += new System.EventHandler(this.btnIr_Click);

                this.AtualizaToolsBotoes(true, false, false, false, true);

                this.clFormularios.ToolBarManutencao.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.TBarCad_ButtonClick);
                this.clFormularios.DataGridConsulta.DoubleClick += new System.EventHandler(this.DataGridConsulta_DoubleClick);
                this.clFormularios.DataGridConsulta.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DataGridConsulta_KeyDown);

            }

        }

        #endregion

        #region Opcoes do Tools Bar

        private void TBarCad_ButtonClick(object sender, ToolStripItemClickedEventArgs e) 
        {             
            switch(this.clFormularios.ToolBarManutencao.Items.IndexOf(e.ClickedItem))
            {
                case 0:         // Inclusao                        
                    this.clFormularios.Alterando = false;
                    this.clFormularios.Incluindo = true;
                    this.AtualizaToolsBotoes(false, false, false, true, false);

                    this.txtCodigo.Focus();    

                    break;

                case 1:         // Alteracao

                    this.clFormularios.Alterando = true;
                    this.clFormularios.Incluindo = false;
                    this.AtualizaToolsBotoes(false, false, false, true, false);

                    this.txtDescricao.Focus();

                    break;
                
                case 2:         // Exclusao

                    if(MessageBox.Show(WorkDev.ERP.Properties.Resources.AP_EXC_Excluir, Program.ClsAmbiente.Sistema, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        this.clBancoDados.ExcluirRegistroTabela(Program.ClsAmbiente, true, "SM_CD_EF_PRODUTO_ANP", "COD = '" + this.clFormularios.Consultando + "'", Program.ClsAuditoria, this, this.clFormularios.Consultando + "-" + this.txtDescricao.Text, Program.ClsError);
                        this.AtualizaToolsBotoes(true, false, false, false, true);
                    }

                break;

                case 3:         // Criticas e Gravação
                        
                    this.SalvarFormulario();

                    break;
            }                
        }

        #endregion

        #region Funcoes

        private void SoNumeros_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {

        }

        private void SoInteiro_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            if (!(char.IsDigit(e.KeyChar)) && (!(char.IsControl(e.KeyChar))))
            {
                e.Handled = true;
                return;
            }
        }

        private void Form_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
        {

            if (e.KeyCode == Keys.Escape)
            {
                if (txtDescricao.Enabled == true)
                    this.AtualizaToolsBotoes(true, false, false, false, true);

                else
                    this.Close();
            }

            else if (e.Control == true && e.KeyCode == Keys.I && this.clFormularios.Incluir == true)
            {
                System.Windows.Forms.ToolStripItemClickedEventArgs Execucao = new ToolStripItemClickedEventArgs(clFormularios.ToolBarManutencao.Items[0]);
                this.TabControlForm.SelectedTab = this.TabManutencao;
                this.TBarCad_ButtonClick(clFormularios.ToolBarManutencao, Execucao);
            }

            else if (e.Control == true && e.KeyCode == Keys.A && this.clFormularios.Alterar == true && clFormularios.ToolBarManutencao.Items[1].Enabled == true)
            {

                System.Windows.Forms.ToolStripItemClickedEventArgs Execucao = new ToolStripItemClickedEventArgs(clFormularios.ToolBarManutencao.Items[1]);
                this.TabControlForm.SelectedTab = this.TabManutencao;
                this.TBarCad_ButtonClick(clFormularios.ToolBarManutencao, Execucao);

            }

            else if (e.Control == true && e.KeyCode == Keys.E && this.clFormularios.Excluir == true && clFormularios.ToolBarManutencao.Items[2].Enabled == true) 
            {

                System.Windows.Forms.ToolStripItemClickedEventArgs Execucao = new ToolStripItemClickedEventArgs(clFormularios.ToolBarManutencao.Items[2]);
                this.TabControlForm.SelectedTab = this.TabManutencao;
                this.TBarCad_ButtonClick(clFormularios.ToolBarManutencao, Execucao);

            }


        }

        private void AtualizaToolsBotoes(Boolean Incluir, Boolean Alterar, Boolean Excluir, Boolean Salvar, Boolean AtualizaVars) 
        {
            this.clFormularios.ToolBarManutencao.Items[0].Enabled = Incluir;
            this.clFormularios.ToolBarManutencao.Items[1].Enabled = Alterar;
            this.clFormularios.ToolBarManutencao.Items[2].Enabled = Excluir;
            this.clFormularios.ToolBarManutencao.Items[3].Enabled = Salvar;

            // Atualizacao de Variaveis

            if (AtualizaVars == true) 
            {
                this.clFormularios.Incluindo = false;
                this.clFormularios.Alterando = false;
                this.clFormularios.Consultando = String.Empty;
            }

            // Atualizacao de Variaveis

            if (this.clFormularios.ToolBarManutencao.Items[1].Enabled == true)
            {
                this.txtCodigo.Enabled = false;
                this.txtDescricao.Enabled = false;
                this.chkInativo.Enabled = false;
            }
            else 
            {
                if (this.clFormularios.Incluindo == true)
                {
                    this.txtCodigo.Enabled = true;
                    this.txtDescricao.Enabled = true;
                    this.chkInativo.Enabled = true;
                }
                else if (this.clFormularios.Alterando == true)
                {
                    this.txtCodigo.Enabled = false;
                    this.txtDescricao.Enabled = true;
                    this.chkInativo.Enabled = true;
                }
                else
                {
                    // Limpando Texts
                    this.txtCodigo.Text = String.Empty;
                    this.txtCodigo.Enabled = false;

                    this.txtDescricao.Text = String.Empty;
                    this.txtDescricao.Enabled = false;

                    this.chkInativo.Checked = false;
                    this.chkInativo.Enabled = false;
                }
            }
        }

        #endregion 
        
        #region Cofiguração de Controle

        #endregion

        #region Criticas e Gravação

        public void SalvarFormulario() 
        {
            if (txtCodigo.Text.Trim() == String.Empty) 
            {
                MessageBox.Show(String.Format(Properties.Resources.AP_CRT_Campo, "Código"), Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.txtCodigo.Focus();
                return;
            }

            if (txtCodigo.Text.Length < (int)Program.NUMERACAO.Nove) 
            {
                MessageBox.Show("Verifique Tamanho do Código.", Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.txtCodigo.Focus();
                return;
            }

            if (txtDescricao.Text.Trim() == String.Empty) 
            {
                MessageBox.Show(String.Format(Properties.Resources.AP_CRT_Campo, "Descrição"), Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.txtDescricao.Focus();
                return;
            }
            // Auditorio
            Program.ClsAuditoria.Auditar_Novo(this);

            // Gravação
            if (this.clFormularios.Incluindo == true)
            {

                FirebirdSql.Data.FirebirdClient.FbConnection Conexao = this.clBancoDados.Conexao();

                try
                {
                    if (this.clBancoDados.PesquisaChave(Program.ClsAmbiente, true, "SM_CD_EF_PRODUTO_ANP", "COD", String.Empty, "DSC = '" + this.txtDescricao.Text.Trim() + "'", String.Empty).Rows.Count > (int)Program.NUMERACAO.Zero)
                    {
                        MessageBox.Show(String.Format(Properties.Resources.AP_CRT_Ja_Existe, "Locação com Essa Descrição"), Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtDescricao.Focus();
                        return;
                    }

                    Conexao.Open();
                    FirebirdSql.Data.FirebirdClient.FbCommand sqcIncluir = new FirebirdSql.Data.FirebirdClient.FbCommand();
                    FirebirdSql.Data.FirebirdClient.FbTransaction SqlT_Transacao = Conexao.BeginTransaction();

                    sqcIncluir.Transaction = SqlT_Transacao;
                    sqcIncluir.CommandText = "INSERT INTO SM_CD_EF_PRODUTO_ANP (COD, DSC, INATIVO) VALUES (@COD, @DSC, @INATIVO)";
                    sqcIncluir.CommandType = System.Data.CommandType.Text;
                    sqcIncluir.Connection = Conexao;

                    sqcIncluir.Parameters.Add("@COD", FirebirdSql.Data.FirebirdClient.FbDbType.Integer).Value = this.txtCodigo.Text.Trim();
                    sqcIncluir.Parameters.Add("@DSC", FirebirdSql.Data.FirebirdClient.FbDbType.VarChar).Value = this.txtDescricao.Text.Trim();
                    sqcIncluir.Parameters.Add("@INATIVO", FirebirdSql.Data.FirebirdClient.FbDbType.SmallInt).Value = this.chkInativo.Checked;

                    try
                    {
                        sqcIncluir.ExecuteNonQuery();

                        // Concluindo(Transação)
                        SqlT_Transacao.Commit();

                        try
                        {
                            // Auditoria
                            Program.ClsAuditoria.Auditar_Salvar(this, this.clFormularios.Consultando + " - " + this.txtDescricao.Text, ClFBWaGenericas2.Classes.ClsEnuns.AUDITORIA_TIPO.Incluir, Program.ClsError);

                        }
                        catch (Exception Ex)
                        {
                            // Salvando Error
                            Program.ClsError.SalvaExeption(Ex);

                            MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Auditoria, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);

                        }
                    }

                    catch (Exception Ex)
                    {
                        // Cancelado Transação
                        SqlT_Transacao.Rollback();

                        // Salvando Error
                        Program.ClsError.SalvaExeption(Ex);

                        MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Operacao, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    finally
                    {
                        sqcIncluir.Dispose();
                    }
                }
                catch (Exception Ex)
                {
                    // Salvando Error
                    Program.ClsError.SalvaExeption(Ex);

                    MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Conexao, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                finally
                {
                    Conexao.Close();
                }
            }

            else 
            {
                FirebirdSql.Data.FirebirdClient.FbConnection Conexao =  this.clBancoDados.Conexao();

                try
                {
                    if (this.clBancoDados.PesquisaChave(Program.ClsAmbiente, true, "SM_CD_EF_PRODUTO_ANP", "COD", String.Empty, "DSC= '" + txtDescricao.Text.Trim() + "' AND NOT COD= " + this.clFormularios.Consultando, String.Empty).Rows.Count > (int)Program.NUMERACAO.Zero)
                    {
                        MessageBox.Show(String.Format(Properties.Resources.AP_CRT_Ja_Existe, "Locação com Essa Descrição."), Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.txtDescricao.Focus();
                        return;
                    }

                    Conexao.Open();
                    FirebirdSql.Data.FirebirdClient.FbCommand sqcAlterar = new FirebirdSql.Data.FirebirdClient.FbCommand();
                    FirebirdSql.Data.FirebirdClient.FbTransaction SqlT_Transacao = Conexao.BeginTransaction();

                    sqcAlterar.Transaction = SqlT_Transacao;
                    sqcAlterar.CommandText = "UPDATE SM_CD_EF_PRODUTO_ANP SET DSC = @DSC, INATIVO = @INATIVO WHERE COD = @COD";
                    sqcAlterar.CommandType = System.Data.CommandType.Text;
                    sqcAlterar.Connection = Conexao;

                    sqcAlterar.Parameters.Add("COD", FirebirdSql.Data.FirebirdClient.FbDbType.VarChar).Value = this.clFormularios.Consultando;
                    sqcAlterar.Parameters.Add("DSC", FirebirdSql.Data.FirebirdClient.FbDbType.VarChar).Value = this.txtDescricao.Text;
                    sqcAlterar.Parameters.Add("@INATIVO", FirebirdSql.Data.FirebirdClient.FbDbType.SmallInt).Value = this.chkInativo.Checked;

                    try
                    {
                        sqcAlterar.ExecuteNonQuery();

                        // Concluindo (Transa~ção)
                        SqlT_Transacao.Commit();

                        try
                        {
                            // Auditoria
                            Program.ClsAuditoria.Auditar_Salvar(this, this.clFormularios.Consultando + " - " + this.txtDescricao.Text, ClFBWaGenericas2.Classes.ClsEnuns.AUDITORIA_TIPO.Alterar, Program.ClsError);
                        }
                        catch (Exception Ex)
                        {
                            // Salvando Error
                            Program.ClsError.SalvaExeption(Ex);

                            MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Auditoria, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    catch (Exception Ex)
                    {
                        // Cancelado Transação
                        SqlT_Transacao.Rollback();

                        // Salvando Error
                        Program.ClsError.SalvaExeption(Ex);

                        MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Operacao, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    finally
                    {
                        sqcAlterar.Dispose();
                    }
                }
                catch (Exception Ex)
                {
                    // Salvando Error
                    Program.ClsError.SalvaExeption(Ex);

                    MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Conexao, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally 
                {
                    Conexao.Close();
                }
            }

            this.AtualizaToolsBotoes(true, false, false, false, true);
        }

        #endregion

        #region Consulta

        private void DataGridConsulta_KeyDown(object sender, KeyEventArgs e) 
        {
            if (e.KeyCode == Keys.Enter) 
            {
                this.Visualizacao();
            }
        }

        private void DataGridConsulta_DoubleClick(object sender, EventArgs e) 
        {
            this.Visualizacao();
        }

        private void Visualizacao() 
        {
            if (clFormularios.DataGridConsulta.Rows.Count == 0)
                return;
            try
            {
                this.clFormularios.Incluindo = false;
                this.clFormularios.Alterando = false;

                System.Data.DataTable dtPesquisa = this.clBancoDados.PesquisaChave(Program.ClsAmbiente, true, "SM_CD_EF_PRODUTO_ANP", "*", "", "COD = '" + this.clFormularios.Consultando, "'");

                this.txtCodigo.Text = dtPesquisa.Rows[0]["COD"].ToString();
                this.txtDescricao.Text = dtPesquisa.Rows[0]["DSC"].ToString();
                this.chkInativo.Checked = Convert.ToBoolean(dtPesquisa.Rows[0]["INATIVO"]);

                // Auditoria
                Program.ClsAuditoria.Auditar_Anterior(this);

                this.AtualizaToolsBotoes(false, true, true, true, false);

                this.clFormularios.DataSetTabela.Clear();
                this.clFormularios.DataSetTabela.Dispose();
            }
            catch (Exception Ex)
            {

                // Salvando Error
                Program.ClsError.SalvaExeption(Ex);

                MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Consultar, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally 
            {
                this.TabControlForm.SelectedTab = this.TabManutencao;
            }
        }

        #endregion

        #region Impressao

        private void btnIr_Click(object sender, System.EventArgs e)
        {
            ClFBWaGenericas2.Forms.FrmStatus FrmStatus = new ClFBWaGenericas2.Forms.FrmStatus();


            try
            {
                this.IMP_ctlShowImpressao.btnIr.Enabled = false;

                FrmStatus.Show(WorkDev.ERP.Properties.Resources.AP_MSG_Carregando);

                StiReport rptImpressao = new StiReport();

                this.DstImpressao.Clear();

                FirebirdSql.Data.FirebirdClient.FbDataAdapter
                 FDA = new FirebirdSql.Data.FirebirdClient.FbDataAdapter("SELECT "
                                                                        + "cod, "
                                                                        + "dsc, "
                                                                        + "CASE WHEN inativo= " + (int)Program.SIMNAO.Sim + " THEN '" + Properties.Resources.AP_SHW_Sim + "' "
                                                                        + "     WHEN inativo= " + (int)Program.SIMNAO.Nao + " THEN '" + Properties.Resources.AP_SHW_Nao + "' "
                                                                        + " END AS inativo "
                                                                        + "FROM SM_CD_EF_PRODUTO_ANP", clBancoDados.Conexao());

                FDA.Fill(DstImpressao);

                if (DstImpressao.Tables[0].Rows.Count == 0)
                {
                    MessageBox.Show(WorkDev.ERP.Properties.Resources.AP_CRT_Impressao, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                rptImpressao.RegData(this.DstImpressao);
                rptImpressao.Load(this.IMP_ctlShowImpressao.StreamRelatorio);
                rptImpressao.Compile();

                this.IMP_ctlShowImpressao.CarregaVariaveisAmbiente(rptImpressao);
                rptImpressao.Show(true);
            }
            catch (Exception Ex)
            {

                // Salvando Error
                Program.ClsError.SalvaExeption(Ex);

                MessageBox.Show(WorkDev.ERP.Properties.Resources.DA_ERR_Impressao, Program.ClsAmbiente.Sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally 
            {
                this.IMP_ctlShowImpressao.btnIr.Enabled = true;
                FrmStatus.Close();
                this.BringToFront();
            }

        }

        #endregion
    }
}
